30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 28일째 1) alloca(1) - 소수 생성 프로그램 2개 추가 (1000과 10000까지) - stack 은 10000 개분 allocate 할 수 없었다 - 물론 malloc 가능 2) alloca(2) - __alloca 함수 만들기 - 스택에 EAX 바이트 공간 확보 - ECX, EDX, EBX, EBP, ESI, EDI 값을 변경하지 마십시오. 3) 파일 API - open,seek,rea... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 25일째 1) BEEP 사운드 - OUT 0x43, AL (0xb6) - 옛날의 qemu 는 BEEP 대응하고 있지 않은 것 같습니다만, 지금은 -soundhw pcspk 로 보통으로 들리는군요. 굉장한 2) 색을 늘리자 - 216을 더하여 231 색으로 3) 색을 늘리자 2 - 애플리케이션 측 코드 수정 - 좋은 느낌으로 보였습니다. 4) 창의 초기 위치 - 중간에 표시하도록 5) 콘솔을 늘리자 1... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 21일째 1) 문자열 표시 API를 이번에야 - 이전 hello2는 CS의 기반이 없었기 때문에 제대로 작동했습니다. - 0xfe8이라는 특정 장소를 취하는 방법으로 2) 응용 프로그램을 C 언어로 만들고 싶습니다. - 애플리케이션용 API 만들기 C 언어로도 프로그램 C로 컴파일 한 내용은 그대로 사용할 수 없으므로 처음 6 바이트를 E8 16 00 00 00 CB로 다시 씁니다 3) OS를 지키자... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」18일째 1) 커서 점멸 제어 1 - 대상 창만 커서를 깜박입니다. - 일단 task_a 창만 2) 커서 점멸 제어 2 - 역시 미묘하지만, 어느 쪽도 대상의 윈도우만 커서 점멸하게 되었다 - (왜 탭 조작에 콘솔 커서를 조작하고 있습니다) 3) Enter 키 대응 - 지금 행의 커서를 스베이스로 지워 - y += 16 하고 '>' 를 쓴다 4) 스크롤 대응 - 기존 7행을 복사하여 마지막 행을 빈 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」15일째 1) 태스크 스위치에 도전 - TSS(작업 상태 세그먼트) - JMP는 내부에서는 EIP를 재기록할 수 있는 것 첫 번째 줄은 작업 스위치로 다시 쓸 수 없습니다 (backlink가 변경 될 수 있음) ldtr, iomap도 마찬가지이지만, 괜찮은 것은 아닙니다. ldtr 은 0, iomap 은 0x40000000 에 일단 둔다 작업 스위치는 JMP 명령을 사용합니다. Near(EIP) 및 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」14일째 1) 또한 성능을 측정해 본다 (a ~ c) - 타이머 490개 만들기 - CPU의 JMP 명령은 날아가는 주소에 따라 실행 클럭 수가 달라진다는 것 - 어셈블리 쓰면 낫는 것 같지만 이번에는하지 않는 방향 2) 고해상도로 하자 (d) - 640x480으로 설정 - VESA 주변 설명 - qemu-system-i386 위는 움직이지 않았다. 새까만 3) 고해상도로 하자 2 (e) - VBE ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」12일째 1) 타이머를 사용합시다 - PIT (Programmable Interval Timer) 있음 inthandler20 및 asm_inthandler20 만들기 set_gatedesc에서 idt + 0x20 추가 2) 시간을 걸어 보자 - counter 가 들어 있는 구조체를 만들어 inthandler20 내에서 카운트 업해 간다 - 모든 기계에서 동일한 속도로 계산됩니다. - counter ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」11일째 1) 더 마우스 - 화면 밖으로 마우스 등을 이동하고 싶지만 작동하지 않는지 확인 2) 화면외 서포트 - sheet_refreshsub 에 화면 밖의 경우는 안에 들어가도록 수정, < 0 을 0 으로 하면 3) shtctl 지정 생략 - shtctl 참조를 sheet 안에 갖도록 변경 - 동작적으로는 특별히 변화 없음 4) 창 만들기 - 닫기 버튼과 제목이 있습니다. 좋아요. 5) 마우스를 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」10일째 1) 메모리 관리 계속 - memory.c로 잘라내기 - 1바이트 단위가 아닌 4k 단위로 Allocate 한다 - 0x1000 자르기, size & 0xfffff000; - 0x1000 반올림, (size & 0xfffff000) + 0x1000; 단 size & 0xfff가 0이 아닌 경우에만 - 또는 (size + 0xfff) & 0xfffff000; 동일하기 때문에 이것을 채택 2) ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」8일째 1) 마우스로부터의 데이터 4 바이트를 읽어내기 위해, 스테이트 머신적인 것을 만든다 - phase1(0xfa) to phase4, 정렬되면 3바이트 표시 2) 마우스의 데이터를 디코드하는 함수를 추가하고, phase 판정은 그 함수 내에서 한다. - enable_mouse 에 phase 의 초기화 0 으로 한다 - 3바이트 버퍼와 phase를 가지는 구조체를 이용 3) 마우스 해독 - 버튼... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」7일째 - 포트 0x60에서 획득 - PIC0_ICW2에 0x61을 보내면 IRQ1 접수 완료가 된다. - 0x61의 1은 IRQ1을 나타내고, IRQ3이면 0x63 (0x60 + IRQ 번호) 키코드를 화면에서 볼 수 있다. 누를 때나 누른 후에도 다른 키 코드가 나온다. - 키 입력이있을 때마다 화면을 그리는 것은 느립니다. - 키 데이터를 확인하고 화면 그리기 - Ctrl 등의 키는 키 코드가... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 6일째 - 세그먼트 디스크립터는 8 바이트 구조 - 세그먼트 주소의 이야기 - base는 4바이트, lower 2바이트, mid 1바이트, high 1바이트로 나누어져 있다. - limit_low 에 16 bit, limit_high 에 4bit 와 속성 4bit 가 혼합되어 있다 - xxxx0000xxxxxxxx, 0000 은 limit_high 의 일부, 최초의 xxxx 는 GD00, Gbit ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」5일째 1) bootinfo 정보와 화면 정보 포인트를 사용하여 받기 외형은 특히 변화 없음 2) 구조체 사용 binfo = (struct BOOTINFO *) 0x0ff0;//구조체 포인터로 캐스트 xsize = (*binfo).scrnx;//(* binfo) 구조체 포인터에서 필드 값을 검색합니다 구조체 필드 액세스 binfo. 및 구조체 포인터 필드 (*binfo). 액세스 설명 4) 문자의 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」4일째 C 언어에서 메모리 쓰기 어셈블리에 write_mem8이라는 함수를 작성하고 C에서 호출하는 형식 16bit 모드에서는 메모리 인덱스는 [CX], [SP]는 할 수 없었지만, 32bit 모드에서는 [ECX], [ESP] 등도 사용할 수 있다는 것. EAX, ECX, EDX는 자유롭게 사용할 수 있다. 8086, 80186, 286은 16bit CPU, 386, Pentium ..은 32bit... 오 S30일에 할 수 있다! OS 자작 입문 30일에 할 수 있다! OS 자작 입문(1일째) [Ubuntu16.04/NASM] "30일로 할 수 있다! OS 자작 입문"의 내용을 Ubuntu(Linux)로 실행하려면 책의 내용만으로는 엄격하기 때문에 조사한 결과를 메모. 우분투 16.04 LTS nasm (nask가 아닌보다 일반적인 nasm을 사용했습니다) (추기:2018/05/29) 소스 코드는 아래의 GitHub에 있습니다. 일부 바이너리 편집기를 설치하고 입력합니다. 자신은 ghex를 사용했습니다. ghex ... 오 S우분투30일에 할 수 있다! OS 자작 입문
메모:「30일로 할 수 있다! OS 자작 입문」 28일째 1) alloca(1) - 소수 생성 프로그램 2개 추가 (1000과 10000까지) - stack 은 10000 개분 allocate 할 수 없었다 - 물론 malloc 가능 2) alloca(2) - __alloca 함수 만들기 - 스택에 EAX 바이트 공간 확보 - ECX, EDX, EBX, EBP, ESI, EDI 값을 변경하지 마십시오. 3) 파일 API - open,seek,rea... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 25일째 1) BEEP 사운드 - OUT 0x43, AL (0xb6) - 옛날의 qemu 는 BEEP 대응하고 있지 않은 것 같습니다만, 지금은 -soundhw pcspk 로 보통으로 들리는군요. 굉장한 2) 색을 늘리자 - 216을 더하여 231 색으로 3) 색을 늘리자 2 - 애플리케이션 측 코드 수정 - 좋은 느낌으로 보였습니다. 4) 창의 초기 위치 - 중간에 표시하도록 5) 콘솔을 늘리자 1... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 21일째 1) 문자열 표시 API를 이번에야 - 이전 hello2는 CS의 기반이 없었기 때문에 제대로 작동했습니다. - 0xfe8이라는 특정 장소를 취하는 방법으로 2) 응용 프로그램을 C 언어로 만들고 싶습니다. - 애플리케이션용 API 만들기 C 언어로도 프로그램 C로 컴파일 한 내용은 그대로 사용할 수 없으므로 처음 6 바이트를 E8 16 00 00 00 CB로 다시 씁니다 3) OS를 지키자... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」18일째 1) 커서 점멸 제어 1 - 대상 창만 커서를 깜박입니다. - 일단 task_a 창만 2) 커서 점멸 제어 2 - 역시 미묘하지만, 어느 쪽도 대상의 윈도우만 커서 점멸하게 되었다 - (왜 탭 조작에 콘솔 커서를 조작하고 있습니다) 3) Enter 키 대응 - 지금 행의 커서를 스베이스로 지워 - y += 16 하고 '>' 를 쓴다 4) 스크롤 대응 - 기존 7행을 복사하여 마지막 행을 빈 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」15일째 1) 태스크 스위치에 도전 - TSS(작업 상태 세그먼트) - JMP는 내부에서는 EIP를 재기록할 수 있는 것 첫 번째 줄은 작업 스위치로 다시 쓸 수 없습니다 (backlink가 변경 될 수 있음) ldtr, iomap도 마찬가지이지만, 괜찮은 것은 아닙니다. ldtr 은 0, iomap 은 0x40000000 에 일단 둔다 작업 스위치는 JMP 명령을 사용합니다. Near(EIP) 및 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」14일째 1) 또한 성능을 측정해 본다 (a ~ c) - 타이머 490개 만들기 - CPU의 JMP 명령은 날아가는 주소에 따라 실행 클럭 수가 달라진다는 것 - 어셈블리 쓰면 낫는 것 같지만 이번에는하지 않는 방향 2) 고해상도로 하자 (d) - 640x480으로 설정 - VESA 주변 설명 - qemu-system-i386 위는 움직이지 않았다. 새까만 3) 고해상도로 하자 2 (e) - VBE ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」12일째 1) 타이머를 사용합시다 - PIT (Programmable Interval Timer) 있음 inthandler20 및 asm_inthandler20 만들기 set_gatedesc에서 idt + 0x20 추가 2) 시간을 걸어 보자 - counter 가 들어 있는 구조체를 만들어 inthandler20 내에서 카운트 업해 간다 - 모든 기계에서 동일한 속도로 계산됩니다. - counter ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」11일째 1) 더 마우스 - 화면 밖으로 마우스 등을 이동하고 싶지만 작동하지 않는지 확인 2) 화면외 서포트 - sheet_refreshsub 에 화면 밖의 경우는 안에 들어가도록 수정, < 0 을 0 으로 하면 3) shtctl 지정 생략 - shtctl 참조를 sheet 안에 갖도록 변경 - 동작적으로는 특별히 변화 없음 4) 창 만들기 - 닫기 버튼과 제목이 있습니다. 좋아요. 5) 마우스를 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」10일째 1) 메모리 관리 계속 - memory.c로 잘라내기 - 1바이트 단위가 아닌 4k 단위로 Allocate 한다 - 0x1000 자르기, size & 0xfffff000; - 0x1000 반올림, (size & 0xfffff000) + 0x1000; 단 size & 0xfff가 0이 아닌 경우에만 - 또는 (size + 0xfff) & 0xfffff000; 동일하기 때문에 이것을 채택 2) ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」8일째 1) 마우스로부터의 데이터 4 바이트를 읽어내기 위해, 스테이트 머신적인 것을 만든다 - phase1(0xfa) to phase4, 정렬되면 3바이트 표시 2) 마우스의 데이터를 디코드하는 함수를 추가하고, phase 판정은 그 함수 내에서 한다. - enable_mouse 에 phase 의 초기화 0 으로 한다 - 3바이트 버퍼와 phase를 가지는 구조체를 이용 3) 마우스 해독 - 버튼... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」7일째 - 포트 0x60에서 획득 - PIC0_ICW2에 0x61을 보내면 IRQ1 접수 완료가 된다. - 0x61의 1은 IRQ1을 나타내고, IRQ3이면 0x63 (0x60 + IRQ 번호) 키코드를 화면에서 볼 수 있다. 누를 때나 누른 후에도 다른 키 코드가 나온다. - 키 입력이있을 때마다 화면을 그리는 것은 느립니다. - 키 데이터를 확인하고 화면 그리기 - Ctrl 등의 키는 키 코드가... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」 6일째 - 세그먼트 디스크립터는 8 바이트 구조 - 세그먼트 주소의 이야기 - base는 4바이트, lower 2바이트, mid 1바이트, high 1바이트로 나누어져 있다. - limit_low 에 16 bit, limit_high 에 4bit 와 속성 4bit 가 혼합되어 있다 - xxxx0000xxxxxxxx, 0000 은 limit_high 의 일부, 최초의 xxxx 는 GD00, Gbit ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」5일째 1) bootinfo 정보와 화면 정보 포인트를 사용하여 받기 외형은 특히 변화 없음 2) 구조체 사용 binfo = (struct BOOTINFO *) 0x0ff0;//구조체 포인터로 캐스트 xsize = (*binfo).scrnx;//(* binfo) 구조체 포인터에서 필드 값을 검색합니다 구조체 필드 액세스 binfo. 및 구조체 포인터 필드 (*binfo). 액세스 설명 4) 문자의 ... 오 S30일에 할 수 있다! OS 자작 입문 메모:「30일로 할 수 있다! OS 자작 입문」4일째 C 언어에서 메모리 쓰기 어셈블리에 write_mem8이라는 함수를 작성하고 C에서 호출하는 형식 16bit 모드에서는 메모리 인덱스는 [CX], [SP]는 할 수 없었지만, 32bit 모드에서는 [ECX], [ESP] 등도 사용할 수 있다는 것. EAX, ECX, EDX는 자유롭게 사용할 수 있다. 8086, 80186, 286은 16bit CPU, 386, Pentium ..은 32bit... 오 S30일에 할 수 있다! OS 자작 입문 30일에 할 수 있다! OS 자작 입문(1일째) [Ubuntu16.04/NASM] "30일로 할 수 있다! OS 자작 입문"의 내용을 Ubuntu(Linux)로 실행하려면 책의 내용만으로는 엄격하기 때문에 조사한 결과를 메모. 우분투 16.04 LTS nasm (nask가 아닌보다 일반적인 nasm을 사용했습니다) (추기:2018/05/29) 소스 코드는 아래의 GitHub에 있습니다. 일부 바이너리 편집기를 설치하고 입력합니다. 자신은 ghex를 사용했습니다. ghex ... 오 S우분투30일에 할 수 있다! OS 자작 입문